package com.lcm.weam.config;

import java.util.LinkedHashMap;

/**
 * FilterChainDefinitionMap构造类
 *  构造shiro过滤器的有序Map集合
 *  配置接口的角色和权限写在这（put从下到上）
 */
public class FilterChainDefinitionMapBuilder {

    public static LinkedHashMap<String, String> build() {
        LinkedHashMap<String, String> map = new LinkedHashMap<>();
        //当运行一个Web应用程序时,Shiro将会创建一些有用的默认Filter实例,并自动地在[main]项中将它们置为可用自动地可用的默认的Filter实例是被DefaultFilter枚举类定义的,枚举的名称字段就是可供配置的名称
        /*
            anon---------------org.apache.shiro.web.filter.authc.AnonymousFilter 没有参数，表示可以匿名使用。
            authc--------------org.apache.shiro.web.filter.authc.FormAuthenticationFilter 表示需要认证(登录)才能使用，没有参数
            authcBasic---------org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter 没有参数表示httpBasic认证
            logout-------------org.apache.shiro.web.filter.authc.LogoutFilter 登出直接跳转到loginUrl
            perms--------------org.apache.shiro.web.filter.authz.PermissionAuthorizationFilter 参数可以写多个，多个时必须加上引号，并且参数之间用逗号分割，例如/admins/user/**=perms["user:add:*,user:modify:*"]，当有多个参数时必须每个参数都通过才通过，想当于isPermitedAll()方法。
            port---------------org.apache.shiro.web.filter.authz.PortFilter port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等，serverName是你访问的host,8081是url配置里port的端口，queryString是你访问的url里的？后面的参数。
            rest---------------org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter 根据请求的方法，相当于/admins/user/**=perms[user:method] ,其中method为post，get，delete等。
            roles--------------org.apache.shiro.web.filter.authz.RolesAuthorizationFilter 参数可以写多个，多个时必须加上引号，并且参数之间用逗号分割，当有多个参数时，例如admins/user/**=roles["admin,guest"],每个参数通过才算通过，相当于hasAllRoles()方法。
            ssl----------------org.apache.shiro.web.filter.authz.SslFilter 没有参数，表示安全的url请求，协议为https
            user---------------org.apache.shiro.web.filter.authz.UserFilter 没有参数表示必须存在用户，当登入操作时不做检查
         */
        map.put("/sys/user/*/auth","anon");
        map.put("/anon/**","anon");
        map.put("/sys/role/**","roles[admin]");
        map.put("/sys/permission/**","roles[admin]");
        map.put("/sys/user/selectAll","roles[admin]");
        map.put("/sys/**","authc");
        map.put("/pro/**","authc");

        return map;
    }
}
